package a07_二叉树;

/**
 * <p>
 * a05_对称二叉树
 * </p>
 *
 * 此时采用的遍历顺序是后续：后序：左右中
 * 左右比较完毕，左右的比较结果才能确定中
 *
 * @author flyduck
 * @since 2024-08-26
 */
//             1
//       2           2
//    3     4     4      3
//  5   6 7   8 8   7  6   5

//5和5相等  left和right比较
//6和6相等  right和left比较
//3和3相等

//7和7相等  left和right比较
//8和8相等  right和left比较
//4和4相等

//2和2相等

public class a08_对称二叉树复习1 {

    public boolean isSymmetric(TreeNode root) {
        return compare(root.left, root.right);
    }

    private boolean compare(TreeNode leftNode,TreeNode rightNode){//比对的对称的节点是否相同
        if(leftNode == null && rightNode != null){
            return false;
        }else if(leftNode != null && rightNode == null){
            return false;
        }else if(leftNode == null && rightNode == null){
            return true;
        }else if(leftNode.val != rightNode.val){
            return false;
        }

        boolean outside = compare(leftNode.left, rightNode.right);
        boolean inside = compare(leftNode.right, rightNode.left);
        return outside && inside;
    }



}
